# 引入 JSON 文件

EMP 支持在代码中引用 JSON 文件，也支持引用 [YAML](https://yaml.org/) 和 [TOML](https://toml.io/en/) 文件并将其转换为 JSON 格式。

## JSON 文件

你可以直接在 JavaScript 文件中引用 JSON 文件。

```json title="demo.json"
{
  "name": "Youli",
  "items": [1, 2],
  "objs": {
    pass: true
  }
}
```

```js title="demo.js"
import demo from './demo.json';

console.log(demo.name); // 'Youli';
console.log(demo.items); // [1, 2];
console.log(demo.objs); // {pass: true};
```

### 具名引用

EMP 同样支持通过 named import 来引用 JSON 文件：

```js title="demo.js"
import { name } from './demo.json';

console.log(name); // 'Youli';
```

## YAML 文件

YAML 是一种数据序列化语言，通常用于编写配置文件。

EMP 提供了 YAML 插件，在注册插件后，你可以在 JavaScript 中引用 .yaml 或 .yml 文件，它们会被自动转换为 JavaScript 对象。

```yaml title="demo.yaml"
---
hello: world
foo:
  bar: lisa
```

```js title="demo.js"
import demo from './demo.yaml';

console.log(demo.hello); // 'world';
console.log(demo.foo); // { bar: 'lisa' };
```

## TOML 文件

TOML 是一种语义明显、易于阅读的配置文件格式。

EMP 提供了 TOML 插件，在注册插件后，你可以在 JavaScript 中引用 .toml 文件，它会被自动转换为 JavaScript 对象。

```yaml title="demo.toml"
hello = "world"

[foo]
bar = "lisa"
```

```js title="demo.js"
import demo from './demo.toml';

console.log(demo.hello); // 'world';
console.log(demo.foo); // { bar: 'lisa' };
```

## 类型声明

当你在 TypeScript 代码中引用 YAML 或 TOML 文件时，请在项目中创建 `src/env.d.ts` 文件，并添加相应的类型声明。

``` ts title="src/env.d.ts"
declare module '*.yaml' {
  const content: Record<string, any>;
  export default content;
}
declare module '*.yml' {
  const content: Record<string, any>;
  export default content;
}
declare module '*.toml' {
  const content: Record<string, any>;
  export default content;
}
```